class AbstractSprite(object):
    """
    A sprite that advances to the next frame when conditions are met.
    
    This will probably just provide the basic blitting logic, allowing a tick() to be implemented
    via subclasses.
    """
    
class StationarySprite(AbstractSprite):
    """
    Most of the time, the game screen will be largely static, except for a single animated cursor.
    
    Unlike every other rendered element in the system, StationarySprites do not honour the global
    redraw-every-frame flag, being redrawn even when everything else is frozen. This allows them to
    drastically cut down on system resource usage by being initialised with their rendering
    geometry pre-defined, which allows them to cache what the surface behind them looked like before
    they appeared and to simply redraw the rectangle beneath them in every frame.
    
    Of course, there's no reason why this needs to be limited to cursors. Character faces and
    figures might move a bit, too.
    """
    
